Планировщик запросов и EXPLAIN
Цель: уметь объяснить “почему запрос медленный” на уровне:
-
доступ к данным (seq/index/bitmap),
-
join-алгоритмы,
-
сортировки/агрегации,
-
оценка кардинальности,
-
I/O и временные файлы.
Связанные темы:
ANALYZE и статистика планировщика
Память, кэш и I/O
EXPLAIN vs EXPLAIN ANALYZE
-
EXPLAIN: план и оценки (cost/rows).
-
EXPLAIN ANALYZE: план + фактическое время и фактические строки.
Если оценки сильно расходятся с фактом ⇒ проблема статистики или неверные предположения.
Типовые “дорогие” узлы
-
Seq Scan по большой таблице без сильного фильтра.
-
Nested Loop Join при большом количестве строк.
-
Sort/GroupAggregate с выливанием на диск (temp files).
-
Hash Join с нехваткой памяти (spill).
Что важно фиксировать в заметках/тикетах (как аналитик)
-
входные параметры запроса и ожидаемую селективность,
-
примерные объёмы данных (порядок),
-
требуемые SLA/latency,
-
частоту вызова (RPS) — запрос на 200ms при 1 RPS и при 200 RPS — разные миры.